home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / COMPILER / SATHER / !Sather / Library / Base / sa / number < prev    next >
Text File  |  1996-07-25  |  4KB  |  135 lines

  1. ---------------------------> Sather 1.1 source file <--------------------------
  2. -- Author: Benedict A. Gomes <gomes@samosa.ICSI.Berkeley.EDU>
  3. -- Copyright (C) 1995, International Computer Science Institute
  4. -- $Id: number.sa,v 1.6 1996/07/25 19:17:22 gomes Exp $
  5. -- COPYRIGHT NOTICE: This code is provided WITHOUT ANY WARRANTY
  6. -- and is subject to the terms of the SATHER LIBRARY GENERAL PUBLIC
  7. -- LICENSE contained in the file: Sather/Doc/License of the
  8. -- Sather distribution. The license is also available from ICSI,
  9. -- 1947 Center St., Suite 600, Berkeley CA 94704, USA.
  10. -------------------------------------------------------------------
  11. abstract class $NFE{NTP} < $NIL,$STR,$IS_EQ is
  12.    -- Abstract class defined over numeric field elements.  Due to
  13.    -- contravariance, we need to parametrize over NTP which is the
  14.    -- type of the argument to many of the defined routines.  Note that
  15.    -- this abstraction is not under $IS_LT{T}, since elements such as
  16.    -- complex numbers are incomparable
  17.    -- 
  18.    -- The subtyping structure is:
  19.    --   $NFE{T}  --- $NUMBER{T} ------ $REAL_NUMBER{T} -- FLT
  20.    --                                                  -- FLTD
  21.    --                           ------ INT 
  22.    --           --- $CPX_NUMBER{ETP,T} --- CPX
  23.    
  24.    zero: NTP;
  25.    -- Return the zero value
  26.  
  27.    maxval: NTP;;
  28.    -- Return the maximal allowed value
  29.  
  30.    one: NTP;
  31.    -- Return a unit value
  32.  
  33.    create(v: INT): SAME;
  34.    -- Create a number from the floating point value. There might
  35.    -- be some loss or gain of precision.
  36.    
  37.    create(v: FLT): SAME;
  38.    -- Create a number from the floating point value. There might
  39.    -- be some loss or gain of precision.
  40.    
  41.    create(v: FLTD): SAME;
  42.    -- Create from a double value in some reasonable way
  43.    
  44.    -- minval: SAME;
  45.    -- Return the minimal allowed value (not yet defined for FLT)
  46.    
  47.    times(n: NTP): SAME;
  48.    -- Return self * n
  49.  
  50.    plus(n: NTP): SAME;
  51.    -- Return self+n
  52.    
  53.    minus(n: NTP): SAME;
  54.    -- Return self - n
  55.    
  56.    div(n: NTP): SAME;
  57.    -- Return the quotient of self and "n"
  58.  
  59.    negate: NTP;
  60.    -- Return the negation of self
  61.  
  62.    abs: NTP;
  63.    -- Return the absolute value of self
  64.    
  65. end; -- class $NFE
  66. -------------------------------------------------------------------
  67. abstract class $NUMBER{NTP} < $IS_LT{NTP},$NFE{NTP} is
  68.    -- Abstraction over Real numbers and Integers This abstraction is
  69.    -- needed to add in the the constraint that numbers are comparable,
  70.    -- unlike general field elements which might not be.
  71.    
  72. end; -- class $NUMBER
  73. -------------------------------------------------------------------
  74. abstract class $REAL_NUMBER{NTP} < $NUMBER{NTP} is
  75.    -- In addition to generic number properties, defines
  76.    -- functions that are applicable to floating point values
  77.    
  78.    exp:NTP;
  79.    -- Return the exponent of the number
  80.    
  81.    cos: NTP;
  82.    -- Return the cosine of self
  83.    
  84.    sin: NTP;
  85.    -- Return the sine of self
  86.  
  87.    sqrt: NTP;
  88.    -- Return the square root of self
  89.    
  90.    atan2(arg: NTP): SAME;
  91.    -- The arc tangent of self divided by arg in the range [-pi/2, pi/2].
  92.    -- It chooses the quadrant specified by (self, arg).
  93.  
  94.    acos:SAME;
  95.    -- The arc cosine of self in the range [0.0 to pi]
  96.    
  97.    asin:SAME;
  98.    -- The arc cosine of self in the range [0.0 to pi]
  99.  
  100.    log:SAME;
  101.    -- Logarithm of self
  102.  
  103.    is_nan: BOOL;
  104.    -- Is not a number.  This only makes sense for IEEE real
  105.    -- numbers.  This class may need to be factored if
  106.    -- we have non-IEEE real numbers at some point
  107.    
  108. end;
  109. -------------------------------------------------------------------
  110. abstract class $CPX_NUMBER{ETP<$REAL_NUMBER{ETP},NTP} < $NFE{NTP} is
  111.    -- Complex numbers are strictly more general than real numbers.
  112.    -- The right abstraction would be to force real numbers to povide a
  113.    -- "zero" real part, but this is quite awkward. It is simpler to
  114.    -- enforce no relationship, which conforms to the way we seem to
  115.    -- actually deal with complex and real numbers
  116.  
  117.    create(re,im: ETP): SAME;
  118.    -- Create a complex number with a real "re" and imaginary "im" part 
  119.    
  120.    create_real(repart: ETP): SAME;
  121.    -- Create a complex number with real part = "re" and imaginary part
  122.    -- equal to zero
  123.  
  124.    re: ETP;
  125.    -- Real part
  126.    
  127.    im: ETP;
  128.    -- Imaginary part
  129.  
  130.    conjugate: SAME;
  131.    
  132. end;
  133. -------------------------------------------------------------------
  134.  
  135.